The present invention relates generally to the Internet suite of protocols (TCP/IP) and, more particularly, provides for a mechanism to carry out an adaptive flow control mechanism between the Internet Protocol (IP) and the Transmission Control Protocol (TCP) of the TCP/IP suite of protocols.
The TCP/IP protocol suite, commonly referred to as TCP/IP, is named for two of its most important protocols: Transmission Control Protocol (TCP) and Internet Protocol (IP).
The first goal of TCP/IP is to enable the interconnection of networks that provide universal communication services. Although each physical network may have its own technology-dependent communication interface, in the form of a programming interface that provides basic communication functions, communication services are provided by software that runs between the physical network and the user applications and that provides a common interface for these applications, independent of the underlying physical network so that the architecture of the physical network is hidden from the user.
The second aim is to interconnect different physical networks to form what appears to the user to be one large network. Such a set of interconnected networks is called an internetwork or an internet and often just the Internet when referring to the global world wide IP network.
To be able to interconnect two networks, one needs a computer-like device that is attached to both networks and that can forward packets from one network to the other; such a machine is called a router, or an IP router, since routing function is part of the IP layer of the TCP/IP protocol suite. The basic properties of a router are such that from the network standpoint, a router is a normal host while from the user standpoint, routers are invisible. The user sees only one large internetwork. Thus, to be able to identify a host on the internetwork, each host is assigned an address i.e., the IP address and, when a host has multiple network adapters or interfaces, each interface has a unique IP address. The IP address consists of two parts: IP address=<network number><host number>. The network number part of the IP address is assigned by a central authority and is unique throughout the Internet. The authority for assigning the host number part of the IP address resides with the organization that controls the network identified by the network number.
Like most networking software, TCP/IP is modeled in layers thus, forming a protocol stack. This is convenient for positioning the TCP/IP protocol suite against other protocols or to compare it to the Open System Interconnection (OSI) model of the ITU-T (International Telecommunications Union—Telecommunication Standardization Sector) even though functional comparisons cannot easily be extracted from this, as there are basic differences in the layered models used by the different protocol suites. Nevertheless, the Internet protocols are modeled in four layers as shown in FIG. 1. The top one is the application layer provided by the program that uses TCP/IP for communication. An application is a user process cooperating with another process on the same or a different host. The interface between the application layer and the transport layer, situated just below it in the protocol stack, is defined by port numbers and sockets. Transport Layer is aimed at providing the end-to-end data transfer. Multiple applications can be supported simultaneously. The transport layer is responsible for providing a reliable exchange of information. The most widely used transport layer protocol is TCP which is further discussed hereafter while another less sophisticated transport layer protocol sometimes used is UDP (User Datagram Protocol) which provides a connectionless service contrary to TCP, which provides a connection-oriented service (i.e., before transmitting data, participants must establish a connection). Therefore, applications using UDP as the transport protocol have to provide their own end-to-end flow control and, usually, UDP is used by applications that need a fast transport mechanism. Underneath is the internetwork layer, also called the internet layer or the network layer which provides the “virtual network” image of an internet (that is, this layer shields the higher levels from the physical network architecture below it). Internet Protocol (IP) is the most important protocol in this layer. It is a connectionless protocol that does not assume reliability from the lower layers. IP does not provide reliability, flow control or error recovery. These functions are e.g., provided by TCP. Part of communicating messages between computers is a routing function that ensures that messages will be correctly delivered to their destination. IP provides this routing function. A message unit in an IP network is called an IP datagram. This is the basic unit of information transmitted across TCP/IP networks. Other internetwork layer protocols are ICMP (Internet Control Message Protocol), IGMP (Internet Group Management Protocol), ARP (Address Resolution Protocol) and RARP (Reverse ARP). Then, the bottom layer is the network interface layer, also called the link layer or the data-link layer, aimed at interfacing the actual network hardware. This interface may or may not provide reliable delivery, and may be packet or stream oriented. In fact, TCP/IP does not specify any protocol here, but can use almost any network interface available, which illustrates the flexibility of the IP layer. An example is IEEE 802.x or Ethernet LAN (Local Area Network). It is worth noting that there is not, per se, any network layer protocol described or standardized rather, standardized ways of accessing network hardware protocols, from the internetwork layer, are specified. The actual interactions between the layers are shown by the arrows in FIG. 1.
Thus, TCP is the standard transport protocol of IP networks. It is described by RFC (Request For Comments) number 793 of the IETF (Internet Engineering Task Force). Although its status is only recommended, in practice, every TCP/IP implementation, that is not used exclusively for routing, includes TCP. TCP is a connection-oriented protocol used by most of the user application protocols, such as Telnet (the terminal emulation protocol used for remote terminal connection, enabling users to log in to a remote system and use resources as if they were connected to a local system) and FTP (File Transfer Protocol). Two processes, running at the applications layer, communicate with each other over a TCP connection. Thus, the primary purpose of TCP is to provide reliable logical circuit or connection service between pairs of processes. It does not assume reliability from the lower-level protocols (such as IP), so TCP guarantees this itself. TCP can be characterized by the following facilities it provides for the applications using it.
First, from the application's viewpoint, TCP transfers a contiguous stream of bytes through the network. The application does not have to bother with chopping the data into basic blocks or datagrams. TCP does this by grouping the bytes in TCP segments, which are passed to IP for transmission to the destination. Also, TCP itself decides how to segment the data and it can forward the data at its own convenience.
Moreover, TCP assigns a sequence number to each byte transmitted and expects a positive acknowledgment (ACK) from the receiving TCP. If the ACK is not received within a timeout interval, the data is retransmitted. Since the data is transmitted in blocks (TCP segments) only the sequence number of the first data byte in the segment is sent to the destination host. The receiving TCP uses the sequence numbers to rearrange the segments when they arrive out of order, and to eliminate duplicate segments.
Also, receiving TCP, when sending an ACK back to the sender, indicates to the sender the number of bytes it can receive beyond the last received TCP segment, without causing overrun and overflow in its internal buffers thus, performing flow control. This information is sent in the ACK in the form of the highest sequence number it can receive without problems. This mechanism is also referred to as a window-mechanism or sliding window. TCP divides this contiguous byte stream into TCP segments to transmit them. The sliding window principle is used at the byte level; that is, the segments sent and ACKs received carry byte-sequence numbers and the window size is expressed as a number of bytes, rather than a number of packets. The window size is determined by the receiver when the connection is established, and is variable during the data transfer. Each ACK message includes the window size that the receiver is ready to deal with at that particular time. The reliability and flow control mechanisms briefly described above require that TCP initializes and maintains certain status information for each data stream forming a logical connection.
All of this and much more are described at length in numerous publications on TCP/IP and IP networks. One well-known reference on the subject being ‘Internetworking with TCP/IP’ by Douglas E. Corner, 2nd Edition, Prentice Hall, 1991.
Although TCP/IP protocols have proven to be very effective to implement large and very large networks, as illustrated by the explosive growth of the Internet over the recent years, limitations of TCP have also been reported in the same time frame. As an example, as early as 1990, RFC1185 entitled ‘TCP Extension for High Paths’ was contemplating some extensions of the original protocol to better adapt to the higher transmission speed of telecommunication lines. Later, in 1992, this RFC was superseded by RFC1323 ‘TCP Extensions for High Performance’ proposing a set of extensions to improve performance over large BDP (Bandwidth Delay Product) paths and to provide reliable operation over very high-speed paths. Still, numerous papers on the subject were published afterwards reporting performance problems observed in the Internet along with solutions to improve the overall flow control mechanism, based on the sliding window concept of TCP, in an attempt to better adapt to high speed paths with long latencies. Indeed, modern implementations of TCP contain four intertwined algorithms that were documented in RFC2001, published in January 1997. Namely: slow start, congestion avoidance, fast retransmit, and fast recovery. Nevertheless, those improvements have not drastically changed the original TCP concept of handling flow control which has shown its limitations to cope with today's very-high-speed transmission lines. Moreover, TCP/IP networks that were originally all-data networks are nowadays becoming all-purpose networks aimed at transporting multi-media information including voice in an attempt to become the ubiquitous network of the future. In contrast to pure data, this latter type of transported information does not fit well with the TCP concept of window, known to be bursty i.e., which does not really care of delivering the pieces of information at regular intervals as the transportation of voice would demand so as to reach the expected level of quality necessary to compete seriously with standard telephone networks.